ResultSetExtractor কি এবং এর প্রয়োজনীয়তা

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) Spring JDBC এবং ResultSetExtractor |
75
75

ResultSetExtractor Spring JDBC-এর একটি ইন্টারফেস, যা ডেটাবেসের একটি ResultSet থেকে কাস্টম অবজেক্ট তৈরি করতে ব্যবহার করা হয়। এটি জটিল এবং কাস্টমাইজড ডেটা প্রসেসিংয়ের জন্য ব্যবহার করা হয়, যেখানে একটি RowMapper যথেষ্ট নয়।


ResultSetExtractor ইন্টারফেসের সিগনেচার:

public interface ResultSetExtractor<T> {
    T extractData(ResultSet rs) throws SQLException, DataAccessException;
}
  • extractData():
    • এই মেথডটি ডেটাবেস থেকে প্রাপ্ত সম্পূর্ণ ResultSet প্রসেস করতে ব্যবহৃত হয়।
    • এটি একটি জাভা অবজেক্ট রিটার্ন করে, যা ডেটা সংগ্রহ বা প্রসেসিংয়ের প্রয়োজনীয় কাজ সম্পন্ন করে।

ResultSetExtractor কেন প্রয়োজন?

  1. কাস্টম লজিক প্রয়োগ:
    • যখন ডেটার উপর নির্দিষ্ট লজিক প্রয়োগ করতে হয়, যেমন নেস্টেড ডেটা প্রসেস করা বা ডেটা গ্রুপিং করা।
  2. মাল্টিপল রো প্রসেসিং:
    • ডেটাবেস থেকে প্রাপ্ত একাধিক রো (row) একই সময়ে প্রসেস করতে হলে এটি দরকার।
  3. জটিল অবজেক্ট ম্যাপিং:
    • জটিল অবজেক্ট বা নেস্টেড অবজেক্ট তৈরি করতে ResultSetExtractor খুব কার্যকর।
  4. বিকল্প টু RowMapper:
    • RowMapper একবারে একটি রো প্রসেস করে, তবে ResultSetExtractor পুরো ResultSet একবারে প্রসেস করতে পারে।

ResultSetExtractor উদাহরণ:

ধরা যাক, আমাদের একটি টেবিল orders রয়েছে যেখানে অর্ডার এবং প্রোডাক্টের সম্পর্ক রয়েছে। আমরা একটি নেস্টেড অবজেক্ট তৈরি করতে চাই যেখানে প্রতিটি অর্ডারের জন্য প্রোডাক্ট লিস্ট থাকবে।


টেবিল: orders

order_idproduct_namequantity
1Laptop2
1Mouse5
2Keyboard3
2Monitor1

Order এবং Product ক্লাস:

import java.util.List;

public class Order {
    private int orderId;
    private List<Product> products;

    // Getters and Setters
    public int getOrderId() {
        return orderId;
    }
    public void setOrderId(int orderId) {
        this.orderId = orderId;
    }
    public List<Product> getProducts() {
        return products;
    }
    public void setProducts(List<Product> products) {
        this.products = products;
    }
}

public class Product {
    private String productName;
    private int quantity;

    // Getters and Setters
    public String getProductName() {
        return productName;
    }
    public void setProductName(String productName) {
        this.productName = productName;
    }
    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }
}

ResultSetExtractor ইমপ্লিমেন্টেশন:

import org.springframework.jdbc.core.ResultSetExtractor;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class OrderResultSetExtractor implements ResultSetExtractor<List<Order>> {
    @Override
    public List<Order> extractData(ResultSet rs) throws SQLException {
        Map<Integer, Order> orderMap = new HashMap<>();
        while (rs.next()) {
            int orderId = rs.getInt("order_id");
            Order order = orderMap.get(orderId);

            if (order == null) {
                order = new Order();
                order.setOrderId(orderId);
                order.setProducts(new ArrayList<>());
                orderMap.put(orderId, order);
            }

            Product product = new Product();
            product.setProductName(rs.getString("product_name"));
            product.setQuantity(rs.getInt("quantity"));

            order.getProducts().add(product);
        }
        return new ArrayList<>(orderMap.values());
    }
}

JdbcTemplate দিয়ে ResultSetExtractor ব্যবহার:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import java.util.List;

public class ResultSetExtractorExample {
    public static void main(String[] args) {
        // DataSource Configuration
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");
        dataSource.setUsername("your_username");
        dataSource.setPassword("your_password");

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        String query = "SELECT order_id, product_name, quantity FROM orders";

        // Execute query with ResultSetExtractor
        List<Order> orders = jdbcTemplate.query(query, new OrderResultSetExtractor());

        // Print orders
        for (Order order : orders) {
            System.out.println("Order ID: " + order.getOrderId());
            for (Product product : order.getProducts()) {
                System.out.println("  Product: " + product.getProductName());
                System.out.println("  Quantity: " + product.getQuantity());
            }
        }
    }
}

আউটপুট:

Order ID: 1
  Product: Laptop
  Quantity: 2
  Product: Mouse
  Quantity: 5
Order ID: 2
  Product: Keyboard
  Quantity: 3
  Product: Monitor
  Quantity: 1

ResultSetExtractor এর সুবিধা:

  1. পূর্ণ ResultSet প্রসেসিং: পুরো ResultSet একবারে প্রসেস করা যায়।
  2. জটিল ডেটা স্ট্রাকচার: নেস্টেড বা গ্রুপড ডেটা তৈরি করতে কার্যকর।
  3. উচ্চতর কাস্টমাইজেশন: কাস্টম লজিক বা ফিল্টারিং সহজে প্রয়োগ করা যায়।

কোথায় ব্যবহার করবেন?

  • যখন জটিল ডেটা প্রসেসিং প্রয়োজন।
  • নেস্টেড অবজেক্ট তৈরি করতে হবে।
  • একাধিক রো থেকে গ্রুপ করা ডেটা প্রয়োজন।

ResultSetExtractor একটি শক্তিশালী ইন্টারফেস যা Spring JDBC-তে জটিল ডেটা ম্যাপিং সহজ করে।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion